#include "ventanaprincipal.h"
#include "imapa.h"

#define TAB_ROWS 32
#define TAB_COLS 32

using namespace ui::tablero::mapa;

namespace ui {

VentanaPrincipal::VentanaPrincipal(const Glib::RefPtr<const Gdk::GL::Config>& p_Config, Mapa& mapaDelJuego, Jugador &jug) :
	Window(WINDOW_TOPLEVEL),
	m_tabPrincipal(TAB_ROWS, TAB_COLS, false),
	m_drwTablero(p_Config, mapa),
	mapa(mapaDelJuego),
	jugador(jug),
	jCliente(2, &mapa){
	
	CargaMapaHardCode();
	
	territorioSeleccionado = false;
	
	this->m_drwTablero.signal_button_press_event().connect(sigc::mem_fun(*this,
					            &VentanaPrincipal::on_imagen_clicked));
	
	this->set_title("TP Final");
	this->set_position(WIN_POS_CENTER);
	this->maximize();

	//Create actions for menus and toolbars:
	this->m_refActionGroup = Gtk::ActionGroup::create();

	this->m_refActionGroup->add(Gtk::Action::create("mnuJuego", "Juego"));
	this->m_refActionGroup->add(Gtk::Action::create("mnuJuegoSalir", "Salir"),
		Gtk::AccelKey("<control>S"),
		sigc::mem_fun(*this, &VentanaPrincipal::on_menu_JuegoSalir));

	this->m_refActionGroup->add(Gtk::Action::create("mnuPartido", "Partido"));
	this->m_refActionGroup->add(Gtk::Action::create("mnuPartidoNuevo", "Nuevo"),
		Gtk::AccelKey("<control>N"),
		sigc::mem_fun(*this, &VentanaPrincipal::on_menu_PartidoNuevo));
	this->m_refActionGroup->add(Gtk::Action::create("mnuPartidoConectar", "Conectar"),
		Gtk::AccelKey("<control>C"),
		sigc::mem_fun(*this, &VentanaPrincipal::on_menu_PartidoConectar));
	this->m_refActionGroup->add(Gtk::Action::create("mnuPartidoAbandonar", "Abandonar"),
		Gtk::AccelKey("<control>A"),
		sigc::mem_fun(*this, &VentanaPrincipal::on_menu_PartidoAbandonar));
	this->m_refActionGroup->add(Gtk::Action::create("mnuPartidoUbicar", "Ubicar"),
		Gtk::AccelKey("<control>U"),
		sigc::mem_fun(*this, &VentanaPrincipal::on_menu_PartidoUbicar));
	this->m_refActionGroup->add(Gtk::Action::create("mnuPartidoAtacar", "Atacar"),
		Gtk::AccelKey("<control>A"),
		sigc::mem_fun(*this, &VentanaPrincipal::on_menu_PartidoAtacar));
	this->m_refActionGroup->add(Gtk::Action::create("mnuPartidoReubicar", "Reubicar"),
		Gtk::AccelKey("<control>R"),
		sigc::mem_fun(*this, &VentanaPrincipal::on_menu_PartidoReubicar));

	this->m_refActionGroup->add(Gtk::Action::create("mnuMapa", "Mapa"));
	this->m_refActionGroup->add(Gtk::Action::create("mnuMapaEsferico", "Esferico"),
		Gtk::AccelKey("<control>E"),
		sigc::mem_fun(*this, &VentanaPrincipal::on_menu_MapaEsferico));
	this->m_refActionGroup->add(Gtk::Action::create("mnuMapaPlano", "Plano"),
		Gtk::AccelKey("<control>P"),
		sigc::mem_fun(*this, &VentanaPrincipal::on_menu_MapaPlano));

	this->m_refUIManager = Gtk::UIManager::create();
	this->m_refUIManager->insert_action_group(m_refActionGroup);

	Glib::ustring ui_info = 
		"<ui>"
		"  <menubar name='MenuBar'>"
		"    <menu action='mnuJuego'>"
		"      <menuitem action='mnuJuegoSalir'/>"
		"    </menu>"
		"    <menu action='mnuPartido'>"
		"      <menuitem action='mnuPartidoNuevo'/>"
		"      <menuitem action='mnuPartidoConectar'/>"
		"      <separator/>"
		"      <menuitem action='mnuPartidoAbandonar'/>"
		"      <separator/>"
		"      <menuitem action='mnuPartidoUbicar'/>"
		"      <menuitem action='mnuPartidoAtacar'/>"
		"      <menuitem action='mnuPartidoReubicar'/>"
		"    </menu>"
		"    <menu action='mnuMapa'>"
		"      <menuitem action='mnuMapaEsferico'/>"
		"      <menuitem action='mnuMapaPlano'/>"
		"    </menu>"
		"  </menubar>"
		"</ui>";

	this->add_accel_group(m_refUIManager->get_accel_group());
	this->m_refUIManager->add_ui_from_string(ui_info);
	Gtk::Widget* pMenubar = m_refUIManager->get_widget("/MenuBar");

	//OTRO
	this->m_frmOtro.set_label("RISK");
	this->m_frmOtro.set_label_align(Gtk::ALIGN_LEFT, Gtk::ALIGN_TOP);
	this->m_frmOtro.set_shadow_type(Gtk::SHADOW_ETCHED_OUT);
	//Estadisticas
	this->m_frmEstadisticas.set_label("Estadisticas");
	this->m_frmEstadisticas.set_label_align(Gtk::ALIGN_LEFT, Gtk::ALIGN_TOP);
	this->m_frmEstadisticas.set_shadow_type(Gtk::SHADOW_ETCHED_OUT);
	this->estadisticasSalida.set_editable(false);
	this->m_frmEstadisticas.add(estadisticasSalida);
	this->otroVBox.pack_start(m_frmEstadisticas, true, true, 10);
	//Mision
	this->m_frmMision.set_label("Mision");
	this->m_frmMision.set_label_align(Gtk::ALIGN_LEFT, Gtk::ALIGN_TOP);
	this->m_frmMision.set_shadow_type(Gtk::SHADOW_ETCHED_OUT);
	this->misionBoton.set_label("Ver Misión");
	this->misionBox.pack_start(misionBoton);
	this->m_frmMision.add(misionBox);
	this->otroVBox.pack_start(m_frmMision,false,true,10);
	//Boton Mapa
	this->m_frmBotonMapa.set_label("Mapa");
	this->m_frmOtro.set_label_align(Gtk::ALIGN_LEFT, Gtk::ALIGN_TOP);
	this->m_frmOtro.set_shadow_type(Gtk::SHADOW_ETCHED_OUT);
	this->mapaBoton.set_label("Cambiar Vista");
	mapaBoton.signal_clicked().connect( sigc::mem_fun(*this,
					            &VentanaPrincipal::on_mapa_boton_clicked));
	this->mapaBox.pack_start(mapaBoton);
	this->m_frmBotonMapa.add(mapaBox);
	this->otroVBox.pack_start(m_frmBotonMapa,false,true,10);
	//Estado
	this->m_frmEstado.set_label("Acciones");
	this->m_frmEstado.set_label_align(Gtk::ALIGN_LEFT, Gtk::ALIGN_TOP);
	this->m_frmEstado.set_shadow_type(Gtk::SHADOW_ETCHED_OUT);
	this->estadoBoton.set_label("No es tu turno");
	estadoBoton.signal_clicked().connect( sigc::mem_fun(*this,
						            &VentanaPrincipal::on_estado_boton_clicked));
	estadoJuego = ESTADO_NO_TURNO;
	this->estadoBox.pack_start(estadoBoton);
	this->m_frmEstado.add(estadoBox);
	this->otroVBox.pack_start(m_frmEstado, false, true, 10);
	
	this->m_frmOtro.add(otroVBox);
	
	//CHAT
	this->m_frmChat.set_label("Chat");
	this->m_frmChat.set_label_align(Gtk::ALIGN_LEFT, Gtk::ALIGN_TOP);
	this->m_frmChat.set_shadow_type(Gtk::SHADOW_ETCHED_OUT);
	this->hBoxChat.pack_start(this->chatEntrada, true, true,0);
	this->chatEntrada.set_editable(true);
	this->hBoxChat.pack_start(this->chatBotonEnviar, false, true, 0);
	chatBotonEnviar.signal_clicked().connect( sigc::mem_fun(*this,
				            &VentanaPrincipal::on_enviar_clicked));
	chatBotonEnviar.set_state(Gtk::STATE_PRELIGHT);
	this->chatBotonEnviar.set_label("Enviar");
	this->vBoxChat.pack_start(this->chatS1, false, false, 0);
	this->chatBarra.add(chatSalida);
	this->chatBarra.get_hscrollbar()->hide();
	this->vBoxChat.pack_start(this->chatBarra, true, true, 0);
	this->chatSalida.set_editable(false);
	this->vBoxChat.pack_start(this->chatS2, false, false, 0);
	this->vBoxChat.pack_start(this->hBoxChat, false, true, 0);
	this->m_frmChat.add(vBoxChat);
	
	//INFORMACION
	this->m_frmInfo.set_label("Info");
	this->m_frmInfo.set_label_align(Gtk::ALIGN_LEFT, Gtk::ALIGN_TOP);
	this->m_frmInfo.set_shadow_type(Gtk::SHADOW_ETCHED_OUT);
	this->infoSalida.set_editable(false);
	this->infoBarra.add(infoSalida);
	this->m_frmInfo.add(infoBarra);
	
	
	
	this->m_tabPrincipal.attach(*pMenubar, 0, 32, 0, 1,
		Gtk::FILL | Gtk::SHRINK, Gtk::FILL | Gtk::SHRINK, 0, 0);
	this->m_tabPrincipal.attach(this->m_drwTablero, 0, 24, 1, 23,
		Gtk::FILL | Gtk::SHRINK, Gtk::FILL | Gtk::SHRINK, 0, 0);
	this->m_tabPrincipal.attach(this->m_frmOtro, 24, 32, 1, 23,
		Gtk::FILL | Gtk::EXPAND, Gtk::FILL | Gtk::EXPAND, 0, 0);
	this->m_tabPrincipal.attach(this->m_frmChat, 0, 12, 23, 32,
		Gtk::FILL | Gtk::EXPAND, Gtk::FILL | Gtk::EXPAND, 0, 0);
	this->m_tabPrincipal.attach(this->m_frmInfo, 12, 32, 23, 32,
		Gtk::FILL | Gtk::EXPAND, Gtk::FILL | Gtk::EXPAND, 0, 0);
	this->add(this->m_tabPrincipal);

	this->show_all();
}

void VentanaPrincipal :: CargaMapaHardCode(){
	Territorio *t, *t2;
	
	mapa.agregarContinente("Uiropa");
	mapa.agregarTerritorio("Scandinavia",172,159, "Uiropa");
	mapa.agregarTerritorio("Great Britain",255,166,"Uiropa");
	mapa.agregarTerritorio("Western Europe",211,134, "Uiropa");
	mapa.agregarContinente("Azio");
	mapa.agregarTerritorio("India",486,221,"Azio");
	mapa.agregarTerritorio("Irkutsk",355,198,"Azio");
	mapa.agregarTerritorio("Siberia",416,138,"Azio");
	
	//Scandinavia
	t = mapa.obtenerTerritorio("Scandinavia");
	t->setEnPoderDe("azul");
	t->colocarEjercitos(4,"azul");
	t2 = mapa.obtenerTerritorio("Great Britain");
	t->agregarAdyacencia(t2);
	t2 = mapa.obtenerTerritorio("Western Europe");
	t->agregarAdyacencia(t2);
	//Great Britain
	t = mapa.obtenerTerritorio("Great Britain");
	t->setEnPoderDe("rojo");
	t->colocarEjercitos(10,"rojo");
	t2 = mapa.obtenerTerritorio("Scandinavia");
	t->agregarAdyacencia(t2);
	t2 = mapa.obtenerTerritorio("Western Europe");
	t->agregarAdyacencia(t2);
	t2 = mapa.obtenerTerritorio("Siberia");
	t->agregarAdyacencia(t2);
	//Western Europe
	t = mapa.obtenerTerritorio("Western Europe");
	t->setEnPoderDe("rojo");
	t->colocarEjercitos(1,"rojo");
	t2 = mapa.obtenerTerritorio("Scandinavia");
	t->agregarAdyacencia(t2);
	t2 = mapa.obtenerTerritorio("Great Britain");
	t->agregarAdyacencia(t2);
	//India
	t = mapa.obtenerTerritorio("India");
	t->setEnPoderDe("rojo");
	t->colocarEjercitos(2,"rojo");
	t2 = mapa.obtenerTerritorio("Irkutsk");
	t->agregarAdyacencia(t2);
	//Irkutsk
	t = mapa.obtenerTerritorio("Irkutsk");
	t->setEnPoderDe("azul");
	t->colocarEjercitos(5,"azul");
	t2 = mapa.obtenerTerritorio("India");
	t->agregarAdyacencia(t2);
	t2 = mapa.obtenerTerritorio("Siberia");
	t->agregarAdyacencia(t2);
	//Siberia
	t = mapa.obtenerTerritorio("Siberia");
	t->setEnPoderDe("azul");
	t->colocarEjercitos(5,"azul");
	t2 = mapa.obtenerTerritorio("Irkutsk");
	t->agregarAdyacencia(t2);
	t2 = mapa.obtenerTerritorio("Great Britain");
	t->agregarAdyacencia(t2);
}


VentanaPrincipal::~VentanaPrincipal() {
}

bool VentanaPrincipal :: on_imagen_clicked(GdkEventButton *event){
	
	string terr, cont;
	if(m_drwTablero.getTerritorioSeleccionado(terr, cont)){
		Continente *c = mapa.obtenerContinente(cont);
		Territorio *t = c->getTerritorio(terr);
		switch(estadoJuego){
			case (ESTADO_SELECCION_PAISES): if(t->getEnPoderDe().compare("") == 0){
												jCliente.colocarEjercitos(&jugador, t, 1);
											}
											else{
												escribirInfo(CTE_TERRITORIO_OCUPADO);
											}
								break; 
	
			case (ESTADO_NO_TURNO): break;
		
			case (ESTADO_REFUERZO): if(t->getEnPoderDe().compare(jugador.getColor()) == 0){
										jCliente.colocarEjercitos(&jugador, t, 1);
									}
									else{
										escribirInfo(CTE_TERRITORIO_AJENO);
									}
								break;
		
			case (ESTADO_ATAQUE): estadoAtaque(*t);
								break;
		
			case (ESTADO_FORTIFICACION): estadoFortificacion(*t);
										 break;
	
		}
	}
	return true;
}

void VentanaPrincipal :: estadoAtaque(Territorio &t){
	
	string color;
	color = t.getEnPoderDe();
	
	if(!territorioSeleccionado){
		
		if(color.compare(jugador.getColor()) == 0){
			territorioSeleccionado = true;
			territorioDesde = &t;
		}
	}
	else{
		if(color.compare(jugador.getColor()) != 0){
			if(t.esAdyacente(territorioDesde)){
				int cantEjercitosPosibles;
				if(territorioDesde->getCantidadDeEjercitos() > 3){
					cantEjercitosPosibles = 3;
				}
				else{
					cantEjercitosPosibles = territorioDesde->getCantidadDeEjercitos()-1;
				}
				int cantDados;
				if(msgDados(cantEjercitosPosibles, cantDados, territorioDesde->getNombre(), t.getNombre())){
					Ataque ataque(&jugador, territorioDesde, &t, cantDados);
					jCliente.realizarAtaque(&ataque);
				}
				territorioSeleccionado = false;
			}
			else{
				escribirInfo(t.getNombre()+" no es limitrofe de "+territorioDesde->getNombre());
			}
		}
		else{
			territorioSeleccionado = false;
			estadoAtaque(t);
		}
		
	}
}

void VentanaPrincipal :: estadoFortificacion(Territorio &t){
	
	string color;
	color = t.getEnPoderDe();
	
	if(!territorioSeleccionado){
		
		if(color.compare(jugador.getColor()) == 0){
			territorioSeleccionado = true;
			territorioDesde = &t;
		}
	}
	else{
		if(color.compare(jugador.getColor()) == 0){
			if(t.esAdyacente(territorioDesde)){
				int cantEjercitosPosibles = territorioDesde->getCantidadDeEjercitos()-1;
				int cantEjercitos;
				if(msgFortificacion(cantEjercitosPosibles, cantEjercitos, territorioDesde->getNombre(), t.getNombre())){
					jCliente.moverEjercitos(&jugador, territorioDesde, &t, cantEjercitos);
				}
				territorioSeleccionado = false;
			}
			else{
				escribirInfo(t.getNombre()+" no es limitrofe de "+territorioDesde->getNombre());
			}
		}
		else{
			territorioSeleccionado = false;
			estadoFortificacion(t);
		}
		
	}
}

bool VentanaPrincipal::on_key_press_event(GdkEventKey *event) {

	if(this->m_drwTablero.on_key_press_event(event) == false){
		this->chatEntrada.on_key_press(event);
	}
	return true;
}

void VentanaPrincipal :: on_enviar_clicked(){
	
	if(this->chatEntrada.get_text().compare("") != 0){
		string msg;
		msg.assign(jugador.getNombre()+": ");
		msg.append(chatEntrada.get_text());
		msg.append("\n");
		chatMsg.append(msg);
		Glib::RefPtr<Gtk::TextBuffer> chatBuffer = Gtk::TextBuffer::create();
		chatBuffer->set_text(chatMsg);
		chatSalida.set_buffer(chatBuffer);
		chatEntrada.set_text("");
		double upper = chatBarra.get_vadjustment()->get_upper();
		chatBarra.get_vadjustment()->set_value(upper);
		chatBarra.get_vadjustment()->changed();
	}
	return;
}

void VentanaPrincipal :: on_mapa_boton_clicked(){
	if(this->m_drwTablero.get_tipo_mapa() == MAPA_PLANO){
		this->m_drwTablero.cambiarMapa(MAPA_ESFERICO);
	}
	else this->m_drwTablero.cambiarMapa(MAPA_PLANO);
}

void VentanaPrincipal :: on_estado_boton_clicked(){
	
	territorioSeleccionado = false;
	
	switch(estadoJuego){
		case (ESTADO_NO_TURNO): estadoJuego = ESTADO_REFUERZO;
						  	estadoBoton.set_label("ATACAR");
						  	escribirInfo("--Es tu turno--");
						  	escribirInfo("--Has comenzado el estado de Refuerzo--");
							break;
	
		case (ESTADO_REFUERZO): estadoJuego = ESTADO_ATAQUE;
						  	estadoBoton.set_label("FORTIFICAR");
						  	escribirInfo("--Haz finalizado el estado de Refuerzo--");
						  	escribirInfo("--Has comenzado el estado de Ataque--");
							break;
		case (ESTADO_ATAQUE): 	estadoJuego = ESTADO_FORTIFICACION;
						  	estadoBoton.set_label("TERMINAR");
						  	escribirInfo("--Has finalizado el estado de Ataque--");
						  	escribirInfo("--Has comenzado el estado de Fortificación--");
						  	break;
		case (ESTADO_FORTIFICACION): estadoJuego = ESTADO_NO_TURNO;
							jCliente.pasar(&jugador);
							estadoBoton.set_label("No es tu turno");
							escribirInfo("--Has terminado el estado de Fortificacion--");
							escribirInfo("--Termino tu turno--");
							break;
	}
}

void VentanaPrincipal::on_menu_JuegoSalir() {
	jCliente.abandonar(&jugador);
	this->hide();
	Gtk::Main::quit();
}

void VentanaPrincipal::on_menu_PartidoNuevo() {
}

void VentanaPrincipal::on_menu_PartidoConectar() {
	string ip, nombreJugador;
	if(msgConectar(ip, nombreJugador)){
		
	}
	else{
		return;
	}
}

void VentanaPrincipal::on_menu_PartidoAbandonar() {
}

void VentanaPrincipal::on_menu_PartidoUbicar() {
}

void VentanaPrincipal::on_menu_PartidoAtacar() {
}

void VentanaPrincipal::on_menu_PartidoReubicar() {
}

void VentanaPrincipal::on_menu_MapaEsferico() {
	this->m_drwTablero.cambiarMapa(MAPA_ESFERICO);
}

void VentanaPrincipal::on_menu_MapaPlano() {
	this->m_drwTablero.cambiarMapa(MAPA_PLANO);
}

void VentanaPrincipal :: escribirInfo(string msg){
	msg.append("\n");
	infoMsg.append(msg);
	Glib::RefPtr<Gtk::TextBuffer> chatBuffer = Gtk::TextBuffer::create();
	chatBuffer->set_text(infoMsg);
	infoSalida.set_buffer(chatBuffer);
	double upper = infoBarra.get_vadjustment()->get_upper();
	infoBarra.get_vadjustment()->set_value(upper);
	infoBarra.get_vadjustment()->changed();
}

bool VentanaPrincipal :: msgDados(int cantDadosPosibles, int &cantDados, string tDesde, string tHasta){
	Gtk::Dialog dialog("Dados", this);
	dialog.set_modal(true);
	Gtk::HBox hBox;
	Gtk::Label batalla(tDesde+" ataca a "+tHasta);
	Gtk::HSeparator hs;
	Gtk::Label msg("Escoja la cantidad de dados a lanzar: ");
	Gtk::ComboBoxText combo;
	hBox.pack_start(msg,true,false,0);
	hBox.pack_start(combo,false,true,0);
	dialog.get_vbox()->pack_start(batalla);
	dialog.get_vbox()->pack_start(hs);
	dialog.get_vbox()->pack_start(hBox);
	dialog.add_button("Lanzar", Gtk::RESPONSE_ACCEPT);
	dialog.add_button("Cancelar", Gtk::RESPONSE_CANCEL);
	
	char cadena[2];
	for(int i = 1; i <= cantDadosPosibles; i++){
		sprintf(cadena,"%d",i); 
		combo.append_text(cadena);
	}
	
	combo.set_active(0);
	
	dialog.show_all();
	int response = dialog.run();
	
	if(response == Gtk::RESPONSE_ACCEPT){
		cantDados = atoi(combo.get_active_text().c_str());
		return true;
	}
	else{
		return false;
	}
}

bool VentanaPrincipal :: msgFortificacion(int cantEjercitosPosibles, int &cantEjercitos, string tDesde, string tHasta){
	Gtk::Dialog dialog("Fortificación de Territorio", this);
	dialog.set_modal(true);
	Gtk::HBox hBox;
	Gtk::Label batalla(tDesde+" mover a "+tHasta);
	Gtk::HSeparator hs;
	Gtk::Label msg2("Escoja la cantidad de ejercitos a mover: ");
	Gtk::ComboBoxText combo;
	hBox.pack_start(msg2,true,false,0);
	hBox.pack_start(combo,false,true,0);
	dialog.get_vbox()->pack_start(batalla);
	dialog.get_vbox()->pack_start(hs);
	dialog.get_vbox()->pack_start(hBox);
	dialog.add_button("Mover", Gtk::RESPONSE_ACCEPT);
	dialog.add_button("Cancelar", Gtk::RESPONSE_CANCEL);
	
	char cadena[2];
	for(int i = 1; i <= cantEjercitosPosibles; i++){
		sprintf(cadena,"%d",i); 
		combo.append_text(cadena);
	}
	combo.set_active(0);
	
	dialog.show_all();
	int response = dialog.run();
	
	if(response == Gtk::RESPONSE_ACCEPT){
		cantEjercitos = atoi(combo.get_active_text().c_str());
		return true;
	}
	else{
		return false;
	}
}

bool VentanaPrincipal :: msgConectar(string &ip, string &nombre){
	
	string ipTemp(""), nomTemp("");
	bool termino = false;
	int response;

	while(!termino){
		Gtk::Dialog dialog("Conectarse a una partida existente", this);
		Gtk::HBox hBox, hBox2, hBox3;
		Gtk::HSeparator hs, hs2;
		Gtk::Label label1("Introduzca la direccion de ip: ");
		Gtk::Entry entradaIP;
		entradaIP.set_text(ipTemp);
		hBox.pack_start(label1, false, true, 0);
		hBox.pack_start(entradaIP, true, true, 0);
		Gtk::Label label2("Nickname: ");
		Gtk::Entry entradaNombre;
		entradaNombre.set_text(nomTemp);
		hBox2.pack_start(label2,false,true,0);
		hBox2.pack_start(entradaNombre, true, true, 0);
		Gtk::Label label3("Seleccione el color deseado: ");
		Gtk::ColorButton cBoton;
		hBox3.pack_start(label3, true, true, 0);
		hBox3.pack_start(cBoton, true, true, 0);
		dialog.get_vbox()->pack_start(hBox);
		dialog.get_vbox()->pack_start(hs);
		dialog.get_vbox()->pack_start(hBox2);
		dialog.get_vbox()->pack_start(hs2);
		dialog.get_vbox()->pack_start(hBox3);
		dialog.add_button("Conectarse", Gtk::RESPONSE_ACCEPT);
		dialog.add_button("Cancelar", Gtk::RESPONSE_CANCEL);
	
		dialog.show_all();
		dialog.set_modal(true);
		response = dialog.run();
	
		if(response == Gtk::RESPONSE_ACCEPT){
			ipTemp = entradaIP.get_text();
			nomTemp = entradaNombre.get_text();
			if(entradaIP.get_text_length() != 0 && entradaNombre.get_text_length() != 0){
				termino = true;
			}
		}
		else{
			termino = true;
		}
	}
	
	if(response == Gtk::RESPONSE_ACCEPT){
		ip.assign(ipTemp);
		nombre.assign(nomTemp);
		return true;
	}
	else
		return false;
}



}//end ui

